import cv2
import numpy
import os
import time
list_cat_name = os.listdir("./cat/")
list_dog_name = os.listdir("./dog/")
path = []
for cat in list_cat_name:
    pathway="./cat/"+cat
    path.append(pathway)
for dog in list_dog_name:
    pathway="./dog/"+dog
    path.append(pathway)
point_sift = []
time1=time.time()
for p in path:
    img=cv2.imread(p)
    img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    sift = cv2.xfeatures2d.SIFT_create()
    point_sift.append(sift.detect(img_gray,None))
time2=time.time()
point_star_sift=[]
features=[]
time3=time.time()
for p in path:
    img=cv2.imread(p)
    img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    sift = cv2.xfeatures2d.SIFT_create()
    star = cv2.xfeatures2d.StarDetector_create()
    point_star = star.detect(img_gray)
    point_star_sift_ls, features_ls = sift.compute(img_gray,point_star)
    point_star_sift.append(point_star_sift_ls)
    features.append(features_ls)
time4 = time.time()
print("："+time2-time1)
print("star-sift检测耗时："+time4-time3)

"""
1、选择star-sift检测
因为两种检测算法得出star-sift检测算法所用的时间为sift检测算法的时间的一半
2、
（1）每一次循环记录一次特征点的个数，然后下一次循环的特征点的个数比较前一次
的特征点的个数记录下数小的那个数，然后等循环完毕则得到了最少的特征点的个数
（2）然后用聚类算法，聚类中心个数为（1）中得到的最少的点的个数，然后得出最
终的特征值

"""
